{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "8fe19b15",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy\n",
    "import matplotlib.pyplot as plt\n",
    "from pandas import read_csv\n",
    "import math\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense\n",
    "from keras.layers import LSTM\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from pandas import concat\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d273afaa",
   "metadata": {},
   "outputs": [],
   "source": [
    "from pandas import read_csv\n",
    "from datetime import datetime\n",
    "# load data\n",
    "dataset = read_csv('da01_max.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "8f931387",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    ����ʱ��  �й��������ֵ��kw��  ��  ��.1  һ��ڼ���  һ��ڼ���.1  weekday  ����  \\\n",
      "0  2019/1/1        117888.3300   1     1        1          1        1     1   \n",
      "1  2019/1/2        126843.7914   1     2        2          1        2     1   \n",
      "2  2019/1/3        130286.1294   1     3        3          1        3     1   \n",
      "3  2019/1/4        133018.6344   1     4        4          1        4     1   \n",
      "4  2019/1/5        133504.4784   1     5        5          1        5     1   \n",
      "\n",
      "   �Ƿ��³�  �Ƿ���ĩ  �Ƿ񼾽ڳ�  �Ƿ񼾽�ĩ  �Ƿ���ĩ.1  ����״��  ����¶�  ����¶�.1  \\\n",
      "0       1       0      1      0         0      3.0    12.0       7.0   \n",
      "1       0       0      0      0         0      5.0    11.0       6.0   \n",
      "2       0       0      0      0         0      2.0    15.0       9.0   \n",
      "3       0       0      0      0         0      3.0    17.0      12.0   \n",
      "4       0       0      0      0         1      3.0    17.0      12.0   \n",
      "\n",
      "   �����������  ҹ����������  \n",
      "0         11.0          8.0  \n",
      "1         11.0          8.0  \n",
      "2         11.0          8.0  \n",
      "3         11.0          8.0  \n",
      "4         11.0          8.0  \n"
     ]
    }
   ],
   "source": [
    "print(dataset.head(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "2543c3f1",
   "metadata": {},
   "outputs": [],
   "source": [
    "# manually specify column names\n",
    "#dataset.drop('Unnamed: 0 ', axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "82c5bfba",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    ����ʱ��  �й��������ֵ��kw��  ��  ��.1  һ��ڼ���  һ��ڼ���.1  weekday  ����  \\\n",
      "0  2019/1/1        117888.3300   1     1        1          1        1     1   \n",
      "1  2019/1/2        126843.7914   1     2        2          1        2     1   \n",
      "2  2019/1/3        130286.1294   1     3        3          1        3     1   \n",
      "3  2019/1/4        133018.6344   1     4        4          1        4     1   \n",
      "4  2019/1/5        133504.4784   1     5        5          1        5     1   \n",
      "\n",
      "   �Ƿ��³�  �Ƿ���ĩ  �Ƿ񼾽ڳ�  �Ƿ񼾽�ĩ  �Ƿ���ĩ.1  ����״��  ����¶�  ����¶�.1  \\\n",
      "0       1       0      1      0         0      3.0    12.0       7.0   \n",
      "1       0       0      0      0         0      5.0    11.0       6.0   \n",
      "2       0       0      0      0         0      2.0    15.0       9.0   \n",
      "3       0       0      0      0         0      3.0    17.0      12.0   \n",
      "4       0       0      0      0         1      3.0    17.0      12.0   \n",
      "\n",
      "   �����������  ҹ����������  \n",
      "0         11.0          8.0  \n",
      "1         11.0          8.0  \n",
      "2         11.0          8.0  \n",
      "3         11.0          8.0  \n",
      "4         11.0          8.0  \n"
     ]
    }
   ],
   "source": [
    "print(dataset.head(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "b9af4d79",
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset.columns = ['数据时间','有功功率最大值（kw）','月','天','一年第几天','一年第几周','weekday','季节','是否月初','是否月末','是否季节初','是否季节末','是否周末','天气状况','最高温度','最低温度','白天风力风向','夜晚风力风向']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "7424ebc2",
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset.drop('数据时间', axis=1, inplace=True)\n",
    "# summarize first 5 rows\n",
    "#print(dataset.head(5))\n",
    "# save to file\n",
    "dataset.to_csv('power.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "3a01e663",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "      有功功率最大值（kw）   月   天  一年第几天  一年第几周  weekday  季节  是否月初  是否月末  是否季节初  \\\n",
      "0     117888.3300   1   1      1      1        1   1     1     0      1   \n",
      "1     126843.7914   1   2      2      1        2   1     0     0      0   \n",
      "2     130286.1294   1   3      3      1        3   1     0     0      0   \n",
      "3     133018.6344   1   4      4      1        4   1     0     0      0   \n",
      "4     133504.4784   1   5      5      1        5   1     0     0      0   \n",
      "...           ...  ..  ..    ...    ...      ...  ..   ...   ...    ...   \n",
      "1060  118612.2023  11  26    330     47        4   4     0     0      0   \n",
      "1061  122398.1424  11  27    331     47        5   4     0     0      0   \n",
      "1062  121936.7430  11  28    332     47        6   4     0     0      0   \n",
      "1063  115242.5837  11  29    333     48        0   4     0     0      0   \n",
      "1064  117293.5346  11  30    334     48        1   4     0     1      0   \n",
      "\n",
      "      是否季节末  是否周末  天气状况   最高温度   最低温度  白天风力风向  夜晚风力风向  \n",
      "0         0     0  3.00  12.00   7.00   11.00    8.00  \n",
      "1         0     0  5.00  11.00   6.00   11.00    8.00  \n",
      "2         0     0  2.00  15.00   9.00   11.00    8.00  \n",
      "3         0     0  3.00  17.00  12.00   11.00    8.00  \n",
      "4         0     1  3.00  17.00  12.00   11.00    8.00  \n",
      "...     ...   ...   ...    ...    ...     ...     ...  \n",
      "1060      0     0  2.00  25.80  16.35   15.20   12.20  \n",
      "1061      0     1  2.00  23.65  15.30   19.40   16.40  \n",
      "1062      0     1  1.15  21.40  13.50   21.15   18.15  \n",
      "1063      0     0  1.85  22.05  13.65   15.20   12.20  \n",
      "1064      0     0  1.15  22.50  14.20   20.40   17.40  \n",
      "\n",
      "[1065 rows x 17 columns]\n"
     ]
    }
   ],
   "source": [
    "print(dataset)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "4c4e13a4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<bound method NDFrame.head of       var1(t-1)  var2(t-1)  var3(t-1)  var4(t-1)  var5(t-1)  var6(t-1)  \\\n",
      "1      0.788463   0.000000   0.000000   0.000000   0.000000   0.166667   \n",
      "2      0.849622   0.000000   0.033333   0.002740   0.000000   0.333333   \n",
      "3      0.873131   0.000000   0.066667   0.005479   0.000000   0.500000   \n",
      "4      0.891791   0.000000   0.100000   0.008219   0.000000   0.666667   \n",
      "5      0.895109   0.000000   0.133333   0.010959   0.000000   0.833333   \n",
      "...         ...        ...        ...        ...        ...        ...   \n",
      "1060   0.814178   0.909091   0.800000   0.898630   0.884615   0.500000   \n",
      "1061   0.793407   0.909091   0.833333   0.901370   0.884615   0.666667   \n",
      "1062   0.819262   0.909091   0.866667   0.904110   0.884615   0.833333   \n",
      "1063   0.816111   0.909091   0.900000   0.906849   0.884615   1.000000   \n",
      "1064   0.770395   0.909091   0.933333   0.909589   0.903846   0.000000   \n",
      "\n",
      "      var7(t-1)  var8(t-1)  var9(t-1)  var10(t-1)  var11(t-1)  var12(t-1)  \\\n",
      "1           0.0        1.0        0.0         1.0         0.0         0.0   \n",
      "2           0.0        0.0        0.0         0.0         0.0         0.0   \n",
      "3           0.0        0.0        0.0         0.0         0.0         0.0   \n",
      "4           0.0        0.0        0.0         0.0         0.0         0.0   \n",
      "5           0.0        0.0        0.0         0.0         0.0         1.0   \n",
      "...         ...        ...        ...         ...         ...         ...   \n",
      "1060        1.0        0.0        0.0         0.0         0.0         0.0   \n",
      "1061        1.0        0.0        0.0         0.0         0.0         0.0   \n",
      "1062        1.0        0.0        0.0         0.0         0.0         1.0   \n",
      "1063        1.0        0.0        0.0         0.0         0.0         1.0   \n",
      "1064        1.0        0.0        0.0         0.0         0.0         0.0   \n",
      "\n",
      "      var13(t-1)  var14(t-1)  var15(t-1)  var16(t-1)  var17(t-1)   var1(t)  \n",
      "1        0.25000    0.071429    0.153846    0.000000    0.000000  0.849622  \n",
      "2        0.50000    0.035714    0.115385    0.000000    0.000000  0.873131  \n",
      "3        0.12500    0.178571    0.230769    0.000000    0.000000  0.891791  \n",
      "4        0.25000    0.250000    0.346154    0.000000    0.000000  0.895109  \n",
      "5        0.25000    0.250000    0.346154    0.000000    0.000000  0.858729  \n",
      "...          ...         ...         ...         ...         ...       ...  \n",
      "1060     0.11250    0.594643    0.569231    0.634375    0.634375  0.793407  \n",
      "1061     0.12500    0.564286    0.513462    0.262500    0.262500  0.819262  \n",
      "1062     0.12500    0.487500    0.473077    0.525000    0.525000  0.816111  \n",
      "1063     0.01875    0.407143    0.403846    0.634375    0.634375  0.770395  \n",
      "1064     0.10625    0.430357    0.409615    0.262500    0.262500  0.784401  \n",
      "\n",
      "[1064 rows x 18 columns]>\n"
     ]
    }
   ],
   "source": [
    "# prepare data for lstm\n",
    "from pandas import DataFrame\n",
    "from pandas import concat\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "\n",
    "# convert series to supervised learning\n",
    "def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):\n",
    "    n_vars = 1 if type(data) is list else data.shape[1]\n",
    "    df = DataFrame(data)\n",
    "    cols, names = list(), list()\n",
    "    # input sequence (t-n, ... t-1)\n",
    "    for i in range(n_in, 0, -1):\n",
    "        cols.append(df.shift(i))\n",
    "        names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]\n",
    "    # forecast sequence (t, t+1, ... t+n)\n",
    "    for i in range(0, n_out):\n",
    "        cols.append(df.shift(-i))\n",
    "        if i == 0:\n",
    "            names += [('var%d(t)' % (j+1)) for j in range(n_vars)]\n",
    "        else:\n",
    "            names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]\n",
    "    # put it all together\n",
    "    agg = concat(cols, axis=1)\n",
    "    agg.columns = names\n",
    "    # drop rows with NaN values\n",
    "    if dropnan:\n",
    "        agg.dropna(inplace=True)\n",
    "    return agg\n",
    "\n",
    "# load dataset\n",
    "dataset = read_csv('power.csv', header=0, index_col=0)\n",
    "values = dataset.values\n",
    "# integer encode direction\n",
    "encoder = LabelEncoder()\n",
    "values[:,4] = encoder.fit_transform(values[:,4])\n",
    "# ensure all data is float\n",
    "values = values.astype('float32')\n",
    "# normalize features\n",
    "scaler = MinMaxScaler(feature_range=(0, 1))\n",
    "scaled = scaler.fit_transform(values)\n",
    "# frame as supervised learning\n",
    "reframed = series_to_supervised(scaled, 1, 1)\n",
    "# drop columns we don't want to predict\n",
    "reframed.drop(reframed.columns[[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33]], axis=1, inplace=True)\n",
    "#print(reframed.head())\n",
    "print(reframed.head)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "31d34811",
   "metadata": {},
   "outputs": [],
   "source": [
    "#plt.plot(reframed)\n",
    "#plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "b8a051ee",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(973, 1, 17) (973,) (91, 1, 17) (91,)\n"
     ]
    }
   ],
   "source": [
    "...\n",
    "# split into train and test sets\n",
    "values = reframed.values\n",
    "n_train_hours = int(len(reframed)-91)\n",
    "train = values[:n_train_hours, :]\n",
    "test = values[n_train_hours:, :]\n",
    "# split into input and outputs\n",
    "train_X, train_y = train[:, :-1], train[:, -1]\n",
    "test_X, test_y = test[:, :-1], test[:, -1]\n",
    "# reshape input to be 3D [samples, timesteps, features]\n",
    "train_X = train_X.reshape((train_X.shape[0], 1, train_X.shape[1]))\n",
    "test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1]))\n",
    "print(train_X.shape, train_y.shape, test_X.shape, test_y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "f1dfb13d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/100\n",
      "14/14 - 1s - loss: 0.6823 - val_loss: 0.5750 - 1s/epoch - 86ms/step\n",
      "Epoch 2/100\n",
      "14/14 - 0s - loss: 0.4157 - val_loss: 0.2262 - 44ms/epoch - 3ms/step\n",
      "Epoch 3/100\n",
      "14/14 - 0s - loss: 0.2146 - val_loss: 0.1184 - 24ms/epoch - 2ms/step\n",
      "Epoch 4/100\n",
      "14/14 - 0s - loss: 0.1693 - val_loss: 0.1170 - 35ms/epoch - 2ms/step\n",
      "Epoch 5/100\n",
      "14/14 - 0s - loss: 0.1453 - val_loss: 0.0751 - 28ms/epoch - 2ms/step\n",
      "Epoch 6/100\n",
      "14/14 - 0s - loss: 0.1418 - val_loss: 0.0691 - 28ms/epoch - 2ms/step\n",
      "Epoch 7/100\n",
      "14/14 - 0s - loss: 0.1310 - val_loss: 0.0650 - 28ms/epoch - 2ms/step\n",
      "Epoch 8/100\n",
      "14/14 - 0s - loss: 0.1213 - val_loss: 0.0569 - 28ms/epoch - 2ms/step\n",
      "Epoch 9/100\n",
      "14/14 - 0s - loss: 0.1145 - val_loss: 0.0523 - 29ms/epoch - 2ms/step\n",
      "Epoch 10/100\n",
      "14/14 - 0s - loss: 0.1087 - val_loss: 0.0476 - 32ms/epoch - 2ms/step\n",
      "Epoch 11/100\n",
      "14/14 - 0s - loss: 0.1044 - val_loss: 0.0421 - 28ms/epoch - 2ms/step\n",
      "Epoch 12/100\n",
      "14/14 - 0s - loss: 0.1011 - val_loss: 0.0398 - 28ms/epoch - 2ms/step\n",
      "Epoch 13/100\n",
      "14/14 - 0s - loss: 0.0979 - val_loss: 0.0371 - 35ms/epoch - 2ms/step\n",
      "Epoch 14/100\n",
      "14/14 - 0s - loss: 0.0953 - val_loss: 0.0359 - 28ms/epoch - 2ms/step\n",
      "Epoch 15/100\n",
      "14/14 - 0s - loss: 0.0925 - val_loss: 0.0347 - 28ms/epoch - 2ms/step\n",
      "Epoch 16/100\n",
      "14/14 - 0s - loss: 0.0900 - val_loss: 0.0333 - 28ms/epoch - 2ms/step\n",
      "Epoch 17/100\n",
      "14/14 - 0s - loss: 0.0879 - val_loss: 0.0323 - 35ms/epoch - 2ms/step\n",
      "Epoch 18/100\n",
      "14/14 - 0s - loss: 0.0859 - val_loss: 0.0315 - 28ms/epoch - 2ms/step\n",
      "Epoch 19/100\n",
      "14/14 - 0s - loss: 0.0839 - val_loss: 0.0309 - 31ms/epoch - 2ms/step\n",
      "Epoch 20/100\n",
      "14/14 - 0s - loss: 0.0821 - val_loss: 0.0304 - 31ms/epoch - 2ms/step\n",
      "Epoch 21/100\n",
      "14/14 - 0s - loss: 0.0804 - val_loss: 0.0300 - 28ms/epoch - 2ms/step\n",
      "Epoch 22/100\n",
      "14/14 - 0s - loss: 0.0788 - val_loss: 0.0297 - 28ms/epoch - 2ms/step\n",
      "Epoch 23/100\n",
      "14/14 - 0s - loss: 0.0771 - val_loss: 0.0293 - 35ms/epoch - 2ms/step\n",
      "Epoch 24/100\n",
      "14/14 - 0s - loss: 0.0755 - val_loss: 0.0288 - 28ms/epoch - 2ms/step\n",
      "Epoch 25/100\n",
      "14/14 - 0s - loss: 0.0738 - val_loss: 0.0288 - 28ms/epoch - 2ms/step\n",
      "Epoch 26/100\n",
      "14/14 - 0s - loss: 0.0726 - val_loss: 0.0283 - 35ms/epoch - 2ms/step\n",
      "Epoch 27/100\n",
      "14/14 - 0s - loss: 0.0713 - val_loss: 0.0285 - 28ms/epoch - 2ms/step\n",
      "Epoch 28/100\n",
      "14/14 - 0s - loss: 0.0699 - val_loss: 0.0289 - 35ms/epoch - 2ms/step\n",
      "Epoch 29/100\n",
      "14/14 - 0s - loss: 0.0689 - val_loss: 0.0283 - 28ms/epoch - 2ms/step\n",
      "Epoch 30/100\n",
      "14/14 - 0s - loss: 0.0679 - val_loss: 0.0282 - 28ms/epoch - 2ms/step\n",
      "Epoch 31/100\n",
      "14/14 - 0s - loss: 0.0666 - val_loss: 0.0292 - 28ms/epoch - 2ms/step\n",
      "Epoch 32/100\n",
      "14/14 - 0s - loss: 0.0658 - val_loss: 0.0284 - 28ms/epoch - 2ms/step\n",
      "Epoch 33/100\n",
      "14/14 - 0s - loss: 0.0649 - val_loss: 0.0289 - 35ms/epoch - 2ms/step\n",
      "Epoch 34/100\n",
      "14/14 - 0s - loss: 0.0638 - val_loss: 0.0291 - 28ms/epoch - 2ms/step\n",
      "Epoch 35/100\n",
      "14/14 - 0s - loss: 0.0629 - val_loss: 0.0286 - 28ms/epoch - 2ms/step\n",
      "Epoch 36/100\n",
      "14/14 - 0s - loss: 0.0620 - val_loss: 0.0283 - 28ms/epoch - 2ms/step\n",
      "Epoch 37/100\n",
      "14/14 - 0s - loss: 0.0612 - val_loss: 0.0282 - 28ms/epoch - 2ms/step\n",
      "Epoch 38/100\n",
      "14/14 - 0s - loss: 0.0603 - val_loss: 0.0287 - 35ms/epoch - 2ms/step\n",
      "Epoch 39/100\n",
      "14/14 - 0s - loss: 0.0593 - val_loss: 0.0293 - 28ms/epoch - 2ms/step\n",
      "Epoch 40/100\n",
      "14/14 - 0s - loss: 0.0585 - val_loss: 0.0287 - 28ms/epoch - 2ms/step\n",
      "Epoch 41/100\n",
      "14/14 - 0s - loss: 0.0580 - val_loss: 0.0274 - 28ms/epoch - 2ms/step\n",
      "Epoch 42/100\n",
      "14/14 - 0s - loss: 0.0574 - val_loss: 0.0282 - 28ms/epoch - 2ms/step\n",
      "Epoch 43/100\n",
      "14/14 - 0s - loss: 0.0561 - val_loss: 0.0309 - 35ms/epoch - 2ms/step\n",
      "Epoch 44/100\n",
      "14/14 - 0s - loss: 0.0559 - val_loss: 0.0330 - 28ms/epoch - 2ms/step\n",
      "Epoch 45/100\n",
      "14/14 - 0s - loss: 0.0561 - val_loss: 0.0277 - 28ms/epoch - 2ms/step\n",
      "Epoch 46/100\n",
      "14/14 - 0s - loss: 0.0560 - val_loss: 0.0302 - 28ms/epoch - 2ms/step\n",
      "Epoch 47/100\n",
      "14/14 - 0s - loss: 0.0565 - val_loss: 0.0298 - 38ms/epoch - 3ms/step\n",
      "Epoch 48/100\n",
      "14/14 - 0s - loss: 0.0545 - val_loss: 0.0478 - 23ms/epoch - 2ms/step\n",
      "Epoch 49/100\n",
      "14/14 - 0s - loss: 0.0595 - val_loss: 0.0325 - 35ms/epoch - 2ms/step\n",
      "Epoch 50/100\n",
      "14/14 - 0s - loss: 0.0555 - val_loss: 0.0384 - 28ms/epoch - 2ms/step\n",
      "Epoch 51/100\n",
      "14/14 - 0s - loss: 0.0621 - val_loss: 0.0289 - 28ms/epoch - 2ms/step\n",
      "Epoch 52/100\n",
      "14/14 - 0s - loss: 0.0545 - val_loss: 0.0465 - 28ms/epoch - 2ms/step\n",
      "Epoch 53/100\n",
      "14/14 - 0s - loss: 0.0605 - val_loss: 0.0425 - 34ms/epoch - 2ms/step\n",
      "Epoch 54/100\n",
      "14/14 - 0s - loss: 0.0598 - val_loss: 0.0434 - 28ms/epoch - 2ms/step\n",
      "Epoch 55/100\n",
      "14/14 - 0s - loss: 0.0608 - val_loss: 0.0297 - 28ms/epoch - 2ms/step\n",
      "Epoch 56/100\n",
      "14/14 - 0s - loss: 0.0527 - val_loss: 0.0428 - 31ms/epoch - 2ms/step\n",
      "Epoch 57/100\n",
      "14/14 - 0s - loss: 0.0565 - val_loss: 0.0402 - 26ms/epoch - 2ms/step\n",
      "Epoch 58/100\n",
      "14/14 - 0s - loss: 0.0560 - val_loss: 0.0405 - 34ms/epoch - 2ms/step\n",
      "Epoch 59/100\n",
      "14/14 - 0s - loss: 0.0576 - val_loss: 0.0300 - 28ms/epoch - 2ms/step\n",
      "Epoch 60/100\n",
      "14/14 - 0s - loss: 0.0517 - val_loss: 0.0432 - 31ms/epoch - 2ms/step\n",
      "Epoch 61/100\n",
      "14/14 - 0s - loss: 0.0551 - val_loss: 0.0429 - 24ms/epoch - 2ms/step\n",
      "Epoch 62/100\n",
      "14/14 - 0s - loss: 0.0552 - val_loss: 0.0399 - 32ms/epoch - 2ms/step\n",
      "Epoch 63/100\n",
      "14/14 - 0s - loss: 0.0564 - val_loss: 0.0304 - 31ms/epoch - 2ms/step\n",
      "Epoch 64/100\n",
      "14/14 - 0s - loss: 0.0511 - val_loss: 0.0433 - 28ms/epoch - 2ms/step\n",
      "Epoch 65/100\n",
      "14/14 - 0s - loss: 0.0537 - val_loss: 0.0436 - 30ms/epoch - 2ms/step\n",
      "Epoch 66/100\n",
      "14/14 - 0s - loss: 0.0542 - val_loss: 0.0407 - 23ms/epoch - 2ms/step\n",
      "Epoch 67/100\n",
      "14/14 - 0s - loss: 0.0554 - val_loss: 0.0312 - 34ms/epoch - 2ms/step\n",
      "Epoch 68/100\n",
      "14/14 - 0s - loss: 0.0497 - val_loss: 0.0408 - 28ms/epoch - 2ms/step\n",
      "Epoch 69/100\n",
      "14/14 - 0s - loss: 0.0526 - val_loss: 0.0428 - 30ms/epoch - 2ms/step\n",
      "Epoch 70/100\n",
      "14/14 - 0s - loss: 0.0532 - val_loss: 0.0417 - 24ms/epoch - 2ms/step\n",
      "Epoch 71/100\n",
      "14/14 - 0s - loss: 0.0546 - val_loss: 0.0315 - 33ms/epoch - 2ms/step\n",
      "Epoch 72/100\n",
      "14/14 - 0s - loss: 0.0486 - val_loss: 0.0411 - 28ms/epoch - 2ms/step\n",
      "Epoch 73/100\n",
      "14/14 - 0s - loss: 0.0518 - val_loss: 0.0436 - 28ms/epoch - 2ms/step\n",
      "Epoch 74/100\n",
      "14/14 - 0s - loss: 0.0519 - val_loss: 0.0408 - 25ms/epoch - 2ms/step\n",
      "Epoch 75/100\n",
      "14/14 - 0s - loss: 0.0529 - val_loss: 0.0320 - 32ms/epoch - 2ms/step\n",
      "Epoch 76/100\n",
      "14/14 - 0s - loss: 0.0479 - val_loss: 0.0408 - 28ms/epoch - 2ms/step\n",
      "Epoch 77/100\n",
      "14/14 - 0s - loss: 0.0503 - val_loss: 0.0426 - 27ms/epoch - 2ms/step\n",
      "Epoch 78/100\n",
      "14/14 - 0s - loss: 0.0502 - val_loss: 0.0387 - 28ms/epoch - 2ms/step\n",
      "Epoch 79/100\n",
      "14/14 - 0s - loss: 0.0509 - val_loss: 0.0326 - 32ms/epoch - 2ms/step\n",
      "Epoch 80/100\n",
      "14/14 - 0s - loss: 0.0483 - val_loss: 0.0423 - 28ms/epoch - 2ms/step\n",
      "Epoch 81/100\n",
      "14/14 - 0s - loss: 0.0502 - val_loss: 0.0445 - 29ms/epoch - 2ms/step\n",
      "Epoch 82/100\n",
      "14/14 - 0s - loss: 0.0505 - val_loss: 0.0383 - 30ms/epoch - 2ms/step\n",
      "Epoch 83/100\n",
      "14/14 - 0s - loss: 0.0494 - val_loss: 0.0340 - 24ms/epoch - 2ms/step\n",
      "Epoch 84/100\n",
      "14/14 - 0s - loss: 0.0486 - val_loss: 0.0414 - 35ms/epoch - 3ms/step\n",
      "Epoch 85/100\n",
      "14/14 - 0s - loss: 0.0488 - val_loss: 0.0437 - 28ms/epoch - 2ms/step\n",
      "Epoch 86/100\n",
      "14/14 - 0s - loss: 0.0494 - val_loss: 0.0368 - 31ms/epoch - 2ms/step\n",
      "Epoch 87/100\n",
      "14/14 - 0s - loss: 0.0469 - val_loss: 0.0374 - 28ms/epoch - 2ms/step\n",
      "Epoch 88/100\n",
      "14/14 - 0s - loss: 0.0490 - val_loss: 0.0391 - 29ms/epoch - 2ms/step\n",
      "Epoch 89/100\n",
      "14/14 - 0s - loss: 0.0473 - val_loss: 0.0430 - 27ms/epoch - 2ms/step\n",
      "Epoch 90/100\n",
      "14/14 - 0s - loss: 0.0480 - val_loss: 0.0345 - 29ms/epoch - 2ms/step\n",
      "Epoch 91/100\n",
      "14/14 - 0s - loss: 0.0439 - val_loss: 0.0407 - 29ms/epoch - 2ms/step\n",
      "Epoch 92/100\n",
      "14/14 - 0s - loss: 0.0478 - val_loss: 0.0332 - 24ms/epoch - 2ms/step\n",
      "Epoch 93/100\n",
      "14/14 - 0s - loss: 0.0439 - val_loss: 0.0466 - 35ms/epoch - 2ms/step\n",
      "Epoch 94/100\n",
      "14/14 - 0s - loss: 0.0487 - val_loss: 0.0350 - 33ms/epoch - 2ms/step\n",
      "Epoch 95/100\n",
      "14/14 - 0s - loss: 0.0435 - val_loss: 0.0440 - 22ms/epoch - 2ms/step\n",
      "Epoch 96/100\n",
      "14/14 - 0s - loss: 0.0498 - val_loss: 0.0314 - 38ms/epoch - 3ms/step\n",
      "Epoch 97/100\n",
      "14/14 - 0s - loss: 0.0439 - val_loss: 0.0482 - 27ms/epoch - 2ms/step\n",
      "Epoch 98/100\n",
      "14/14 - 0s - loss: 0.0516 - val_loss: 0.0401 - 32ms/epoch - 2ms/step\n",
      "Epoch 99/100\n",
      "14/14 - 0s - loss: 0.0478 - val_loss: 0.0467 - 32ms/epoch - 2ms/step\n",
      "Epoch 100/100\n",
      "14/14 - 0s - loss: 0.0536 - val_loss: 0.0326 - 30ms/epoch - 2ms/step\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "...\n",
    "# design network\n",
    "model = Sequential()\n",
    "model.add(LSTM(50, input_shape=(train_X.shape[1], train_X.shape[2])))\n",
    "model.add(Dense(1))\n",
    "model.compile(loss='mae', optimizer='adam')\n",
    "# fit network\n",
    "history = model.fit(train_X, train_y, epochs=100, batch_size=72, validation_data=(test_X, test_y), verbose=2, shuffle=False)\n",
    "# plot history\n",
    "plt.plot(history.history['loss'], label='train')\n",
    "plt.plot(history.history['val_loss'], label='test')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "64a0d2b0",
   "metadata": {},
   "outputs": [],
   "source": [
    "# make predictions\n",
    "#trainPredict = model.predict(train_X)\n",
    "#testPredict = model.predict(test_X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "7c7a3607",
   "metadata": {},
   "outputs": [],
   "source": [
    "...\n",
    "# make a prediction\n",
    "yhat = model.predict(test_X)\n",
    "test_X = test_X.reshape((test_X.shape[0], test_X.shape[2]))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "2e095d4f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(91, 1) (91, 17)\n"
     ]
    }
   ],
   "source": [
    "yhat=DataFrame(yhat)\n",
    "test_X=DataFrame(test_X)\n",
    "print(yhat.shape,test_X.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "f5b552e4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>13</th>\n",
       "      <th>14</th>\n",
       "      <th>15</th>\n",
       "      <th>16</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.626352</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.663014</td>\n",
       "      <td>0.653846</td>\n",
       "      <td>0.166667</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.00000</td>\n",
       "      <td>0.785714</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875000</td>\n",
       "      <td>0.875000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.852859</td>\n",
       "      <td>0.727273</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.665753</td>\n",
       "      <td>0.653846</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.34375</td>\n",
       "      <td>0.864286</td>\n",
       "      <td>0.909615</td>\n",
       "      <td>0.525000</td>\n",
       "      <td>0.525000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.912374</td>\n",
       "      <td>0.727273</td>\n",
       "      <td>0.033333</td>\n",
       "      <td>0.668493</td>\n",
       "      <td>0.653846</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.41250</td>\n",
       "      <td>0.857143</td>\n",
       "      <td>0.898077</td>\n",
       "      <td>0.525000</td>\n",
       "      <td>0.525000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.918585</td>\n",
       "      <td>0.727273</td>\n",
       "      <td>0.066667</td>\n",
       "      <td>0.671233</td>\n",
       "      <td>0.653846</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.34375</td>\n",
       "      <td>0.867857</td>\n",
       "      <td>0.905769</td>\n",
       "      <td>0.525000</td>\n",
       "      <td>0.525000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.929028</td>\n",
       "      <td>0.727273</td>\n",
       "      <td>0.100000</td>\n",
       "      <td>0.673973</td>\n",
       "      <td>0.653846</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.23125</td>\n",
       "      <td>0.860714</td>\n",
       "      <td>0.898077</td>\n",
       "      <td>0.587500</td>\n",
       "      <td>0.587500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>86</th>\n",
       "      <td>0.803999</td>\n",
       "      <td>0.909091</td>\n",
       "      <td>0.800000</td>\n",
       "      <td>0.898630</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.11250</td>\n",
       "      <td>0.594643</td>\n",
       "      <td>0.569231</td>\n",
       "      <td>0.634375</td>\n",
       "      <td>0.634375</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>87</th>\n",
       "      <td>0.787081</td>\n",
       "      <td>0.909091</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>0.901370</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.12500</td>\n",
       "      <td>0.564286</td>\n",
       "      <td>0.513462</td>\n",
       "      <td>0.262500</td>\n",
       "      <td>0.262500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>88</th>\n",
       "      <td>0.811245</td>\n",
       "      <td>0.909091</td>\n",
       "      <td>0.866667</td>\n",
       "      <td>0.904110</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.12500</td>\n",
       "      <td>0.487500</td>\n",
       "      <td>0.473077</td>\n",
       "      <td>0.525000</td>\n",
       "      <td>0.525000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>89</th>\n",
       "      <td>0.804593</td>\n",
       "      <td>0.909091</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>0.906849</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.01875</td>\n",
       "      <td>0.407143</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.634375</td>\n",
       "      <td>0.634375</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>90</th>\n",
       "      <td>0.778601</td>\n",
       "      <td>0.909091</td>\n",
       "      <td>0.933333</td>\n",
       "      <td>0.909589</td>\n",
       "      <td>0.903846</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.10625</td>\n",
       "      <td>0.430357</td>\n",
       "      <td>0.409615</td>\n",
       "      <td>0.262500</td>\n",
       "      <td>0.262500</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>91 rows × 17 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2         3         4         5         6    7   \\\n",
       "0   0.626352  0.636364  1.000000  0.663014  0.653846  0.166667  0.666667  0.0   \n",
       "1   0.852859  0.727273  0.000000  0.665753  0.653846  0.333333  0.666667  1.0   \n",
       "2   0.912374  0.727273  0.033333  0.668493  0.653846  0.500000  0.666667  0.0   \n",
       "3   0.918585  0.727273  0.066667  0.671233  0.653846  0.666667  0.666667  0.0   \n",
       "4   0.929028  0.727273  0.100000  0.673973  0.653846  0.833333  0.666667  0.0   \n",
       "..       ...       ...       ...       ...       ...       ...       ...  ...   \n",
       "86  0.803999  0.909091  0.800000  0.898630  0.884615  0.500000  1.000000  0.0   \n",
       "87  0.787081  0.909091  0.833333  0.901370  0.884615  0.666667  1.000000  0.0   \n",
       "88  0.811245  0.909091  0.866667  0.904110  0.884615  0.833333  1.000000  0.0   \n",
       "89  0.804593  0.909091  0.900000  0.906849  0.884615  1.000000  1.000000  0.0   \n",
       "90  0.778601  0.909091  0.933333  0.909589  0.903846  0.000000  1.000000  0.0   \n",
       "\n",
       "     8    9    10   11       12        13        14        15        16  \n",
       "0   1.0  0.0  0.0  0.0  1.00000  0.785714  0.884615  0.875000  0.875000  \n",
       "1   0.0  0.0  0.0  0.0  0.34375  0.864286  0.909615  0.525000  0.525000  \n",
       "2   0.0  0.0  0.0  0.0  0.41250  0.857143  0.898077  0.525000  0.525000  \n",
       "3   0.0  0.0  0.0  0.0  0.34375  0.867857  0.905769  0.525000  0.525000  \n",
       "4   0.0  0.0  0.0  1.0  0.23125  0.860714  0.898077  0.587500  0.587500  \n",
       "..  ...  ...  ...  ...      ...       ...       ...       ...       ...  \n",
       "86  0.0  0.0  0.0  0.0  0.11250  0.594643  0.569231  0.634375  0.634375  \n",
       "87  0.0  0.0  0.0  0.0  0.12500  0.564286  0.513462  0.262500  0.262500  \n",
       "88  0.0  0.0  0.0  1.0  0.12500  0.487500  0.473077  0.525000  0.525000  \n",
       "89  0.0  0.0  0.0  1.0  0.01875  0.407143  0.403846  0.634375  0.634375  \n",
       "90  0.0  0.0  0.0  0.0  0.10625  0.430357  0.409615  0.262500  0.262500  \n",
       "\n",
       "[91 rows x 17 columns]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_X[0]=yhat\n",
    "test_X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "02cb65cc",
   "metadata": {},
   "outputs": [],
   "source": [
    "inv_yhat = scaler.inverse_transform(test_X)\n",
    "inv_yhat = inv_yhat[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "887968dc",
   "metadata": {},
   "outputs": [],
   "source": [
    "# invert scaling for actual\n",
    "test_y = test_y.reshape((len(test_y), 1))\n",
    "test_X[0]=test_y\n",
    "inv_y = scaler.inverse_transform(test_X)\n",
    "inv_y = inv_y[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "64783e5b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test Score: 6949.329\n"
     ]
    }
   ],
   "source": [
    "# calculate RMSE\n",
    "from math import sqrt\n",
    "#trainScore = sqrt(mean_squared_error(train_y[0], inv_yhat[0]))\n",
    "#print('Train Score: %.3f RMSE' % (trainScore))\n",
    "rmse2 = sqrt(mean_squared_error(inv_y, inv_yhat))\n",
    "print('Test Score: %.3f' % rmse2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "1c22321c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([124567.35 , 135407.16 , 136866.86 , 137885.83 , 135624.97 ,\n",
       "       128407.75 , 137297.23 , 130774.2  , 139300.05 , 139922.69 ,\n",
       "       139617.78 , 132941.28 , 113738.85 , 120039.89 , 129354.68 ,\n",
       "       134705.56 , 137767.81 , 135653.7  , 130814.234, 126528.34 ,\n",
       "       135000.27 , 131397.31 , 136072.55 , 136619.16 , 133496.23 ,\n",
       "       132601.78 , 128369.23 , 131202.56 , 132196.58 , 117991.305,\n",
       "        92589.76 ,  64175.73 ,  87558.56 , 104504.66 , 116329.945,\n",
       "       120539.055, 122287.15 , 125843.06 , 127048.375, 129581.9  ,\n",
       "       122583.46 , 129773.31 , 125131.49 , 131638.44 , 130758.85 ,\n",
       "       124733.9  , 128662.86 , 122520.97 , 126542.39 , 123149.6  ,\n",
       "       129198.94 , 126951.664, 127393.72 , 126058.375, 121298.445,\n",
       "       120666.78 , 122710.17 , 128009.27 , 125277.36 , 124126.91 ,\n",
       "       119288.27 , 110519.164, 121303.5  , 119047.27 , 123406.08 ,\n",
       "       125642.61 , 125111.3  , 123931.98 , 118206.84 , 124242.89 ,\n",
       "       119556.9  , 118323.72 , 123844.08 , 123140.61 , 121354.4  ,\n",
       "       114702.69 , 116352.52 , 116099.69 , 123954.414, 124179.51 ,\n",
       "       126883.4  , 124410.47 , 117315.164, 121116.164, 117270.34 ,\n",
       "       121653.664, 118612.2  , 122398.14 , 121936.74 , 115242.586,\n",
       "       117293.53 ], dtype=float32)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inv_y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "227db62c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "91 91\n"
     ]
    }
   ],
   "source": [
    "print(len(inv_y),len(inv_yhat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "a388d8c6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 94150.43 , 127317.805, 136032.5  , 136941.95 , 138471.16 ,\n",
       "       137980.84 , 130205.71 , 137174.58 , 132314.48 , 137958.02 ,\n",
       "       138077.75 , 140055.94 , 134432.62 , 117592.266, 121542.37 ,\n",
       "       128554.86 , 133653.27 , 134747.39 , 136205.75 , 132833.45 ,\n",
       "       128325.52 , 133787.52 , 129449.91 , 133044.8  , 134761.7  ,\n",
       "       132165.66 , 132764.64 , 128095.39 , 129994.96 , 130058.2  ,\n",
       "       105418.836,  94178.11 ,  77169.96 ,  95900.13 , 109252.14 ,\n",
       "       120002.08 , 121937.3  , 123428.52 , 126667.664, 127381.57 ,\n",
       "       130430.57 , 124688.84 , 130246.305, 125102.78 , 131415.64 ,\n",
       "       129441.13 , 125507.914, 128427.69 , 123900.25 , 127479.52 ,\n",
       "       123177.28 , 128004.766, 125962.48 , 126927.47 , 125906.555,\n",
       "       121087.75 , 120592.35 , 121540.1  , 124639.13 , 122879.484,\n",
       "       121892.   , 113051.42 , 116163.31 , 124645.22 , 121681.74 ,\n",
       "       124883.62 , 125894.28 , 126944.164, 126133.91 , 121282.95 ,\n",
       "       125549.016, 121416.836, 119239.67 , 124343.266, 124254.54 ,\n",
       "       123631.83 , 118523.47 , 118559.086, 118089.984, 123701.92 ,\n",
       "       123707.81 , 126694.09 , 125331.47 , 118410.766, 121430.625,\n",
       "       117394.27 , 120163.266, 117685.984, 121224.3  , 120250.16 ,\n",
       "       116444.26 ], dtype=float32)"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inv_yhat"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "3314d790",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MAPE: 0.04165997\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from sklearn import metrics\n",
    "def mape(y_true, y_pred):\n",
    "    return np.mean(np.abs((y_pred - y_true) / y_true))\n",
    "print('MAPE:',mape(inv_y, inv_yhat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "1f9a9a20",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "R2-score: 0.5852935569113342\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import r2_score\n",
    "print('R2-score:',r2_score(inv_y, inv_yhat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "27b1d1c5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x248efaf4670>]"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(inv_yhat,'r')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "334e9396",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "inv_yhat=pd.DataFrame(data=inv_yhat)\n",
    "inv_yhat.to_csv('inv_y.csv')\n",
    "inv_yhat.to_csv('da01_max_pre.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "776d1290",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
